/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [Java_Util_Random.java]
 * Creation Date        [16-Jun-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_api_testing;

import java.util.Random;

/**
 * java.util.Random
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class Java_Util_Random {

	/**
	 * 使用Math类的random方法生成随机数
	 */
	public static void generateRandomNumberByMathMethod() {
		System.out.println("产生一个1到31的随机数: " + ((int) (Math.random() * 31) + 1));
	}

	/**
	 * 使用Random类生成随机数
	 */
	public static void generateRandomNumberByRandomClass() {
		// 采用Random类来产生随机数
		Random random = new Random();
		System.out.println("产生一个int类型的数字: " + random.nextInt());

		// 产生指定范围的随机数
		System.out.println("产生一个5到25的随机数: " + (5 + random.nextInt(20)));

		// 按均匀分布产生[0,1)的随机数
		System.out.println("float类型的随机数: " + random.nextFloat());
		System.out.println("double类型的随机数: " + random.nextDouble());

		// 生成一系列随机数
		for (int i = 0; i < 10; i++) {
			System.out.print((3 + random.nextInt(25)) + "\t");
		}

		System.out.println();

		for (int i = 0; i < 10; i++) {
			System.out.print(random.nextFloat() * 100 + "\t");
		}

		System.out.println();

		/*
		 * 相同的种子产生的随机数序列相等
		 * 
		 * 无参数的构造方法采用的种子是当前系统时间的毫秒数
		 */
		Random random2 = new Random(10);
		for (int i = 0; i < 5; i++) {
			System.out.print(random2.nextInt() + "\t");
		}

		System.out.println();

		Random random3 = new Random(10);
		for (int i = 0; i < 5; i++) {
			System.out.print(random3.nextInt() + "\t");
		}

		// 上述random2和random3生成的随机数列是一致的
		// 使用两个无参构造函数生成的Random对象则不会出现这种情况, 因为在无参构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 *            命令行参数
	 */
	public static void main(String[] args) {
		Java_Util_Random.generateRandomNumberByMathMethod();
		Java_Util_Random.generateRandomNumberByRandomClass();
	}

}
